package com.heima.stroke.handler;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.heima.commons.domin.bo.RoutePlanResultBO;
import com.heima.commons.domin.bo.TextValue;
import com.heima.commons.utils.HttpClientUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.util.UriUtils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Component
public class BaiduMapClient {
    @Value("${baidu.map.api}")
    private String api;
    @Value("${baidu.map.ak}")
    private String ak;

    private final static Logger logger = LoggerFactory.getLogger(BaiduMapClient.class);

    //TODO:任务3.2-调百度路径计算两点间的距离，和预估抵达时长
    public RoutePlanResultBO pathPlanning(String origins, String destinations){
        String AK="Kowd8DOLLfbpAbaJfVOausQTkkPt1aFS";
        String url = "https://api.map.baidu.com/routematrix/v2/driving";
        Map params = new LinkedHashMap<String, String>();
        params.put("origins", origins);
        params.put("destinations", destinations);
        params.put("ak", AK);

        String result = null;
        try {
            result = HttpClientUtils.doGet(url, params);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        logger.info("百度路径规划接口返回结果：{}", result);
//        String result1 = JSONObject.parseObject(result).getString("result");
//        JSONArray jsonArray = JSONObject.parseArray(result1);
        JSONObject jsonObject = JSON.parseObject(result).getJSONArray("result").getJSONObject(0);
        JSONObject distance = jsonObject.getJSONObject("distance");

//        return JSON.parseObject(jsonArray.get(0).toString(), RoutePlanResultBO.class);
        return null;
    }
        //__________________________________________________

//        String body = null;
//
//
//        BaiduMapClient snCal = new BaiduMapClient();
//
//
//
//        Map params = new LinkedHashMap<String, String>();
//        params.put("origins", origins);
//        params.put("destinations", destinations);
//        params.put("ak",AK);
//        try {
//           body = snCal.requestGetAK(url, params);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//         String result1 = JSONObject.parseObject(body).getString("result");
//        JSONArray jsonArray = JSONObject.parseArray(result1);
//        return JSON.parseObject(jsonArray.get(0).toString(), RoutePlanResultBO.class);
//    }
//   /**
//     * 默认ak
//     * 选择了ak，使用IP白名单校验：
//     * 根据您选择的AK已为您生成调用代码
//     * 检测到您当前的ak设置了IP白名单校验
//     * 您的IP白名单中的IP非公网IP，请设置为公网IP，否则将请求失败
//     * 请在IP地址为0.0.0.0/0 外网IP的计算发起请求，否则将请求失败
//     */
//    private String requestGetAK(String strUrl, Map<String, String> param) throws Exception {
//        if (strUrl == null || strUrl.length() <= 0 || param == null || param.size() <= 0) {
//            return null;
//        }
//        StringBuffer queryString = new StringBuffer();
//        queryString.append(strUrl);
//        for (Map.Entry<?, ?> pair : param.entrySet()) {
//            queryString.append(pair.getKey() + "=");
//            //    第一种方式使用的 jdk 自带的转码方式  第二种方式使用的 spring 的转码方法 两种均可
//            queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8").replace("+", "%20") + "&");
//            //queryString.append(UriUtils.encode((String) pair.getValue(), "UTF-8") + "&");
//        }
//
//        if (queryString.length() > 0) {
//            queryString.deleteCharAt(queryString.length() - 1);
//        }
//
//        URL url = new URL(queryString.toString());
//        System.out.println("--------------queryString------------------");
//        System.out.println(queryString.toString());
//        URLConnection httpConnection = (HttpURLConnection) url.openConnection();
//        httpConnection.connect();
//
//        InputStreamReader isr = new InputStreamReader(httpConnection.getInputStream());
//        BufferedReader reader = new BufferedReader(isr);
//        StringBuffer buffer = new StringBuffer();
//        String line;
//        while ((line = reader.readLine()) != null) {
//            buffer.append(line);
//        }
//        reader.close();
//        isr.close();
//        return buffer.toString();
//    }



}
